﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Mighty.PlayingBoard
{
    class Server
    {

        //private MainWnd wnd = null;
        //private int port = 7007;

        //private Socket server = null;
        //private Thread th = null;

        //private ClientGroup cgroup = null;

        //public ClientGroup ClientGroup
        //{
        //    get
        //    {
        //        return cgroup;
        //    }
        //}



 
        ///// <summary>
        ///// 메신저 서버 생성자
        ///// </summary>
        ///// <param name="wnd"></param>
        ///// <param name="port"></param> 
        //public Server(MainWnd wnd, int port)
        //{
        //    this.wnd = wnd;
        //    this.port = port;
        //}

        ///// <summary>
        ///// 서버 시작
        ///// </summary>
        //public void ServerStart()
        //{
        //    try
        //    {
        //        cgroup = new ClientGroup(); // 클라이언트 그룹 생성자 호출

        //        th = new Thread(new ThreadStart(AcceptClient));
        //        th.IsBackground = true;
        //        th.Start();
        //    }
        //    catch (Exception ex)
        //    {
        //        this.wnd.Add_MSG(ex.Message);
        //    }
        //}

        ///// <summary>
        ///// 서버 종료
        ///// </summary>
        //public void ServerStop()
        //{
        //    try
        //    {
        //        cgroup.Dispose(); // 클라이언트 그룹 소멸자 호출

        //        if (th.IsAlive)
        //        {
        //            th.Abort();
        //        }
        //        server.Close();
        //    }
        //    catch (Exception ex)
        //    {
        //        this.wnd.Add_MSG(ex.Message);
        //    }
        //}


        ///// <summary>
        ///// 메신저 클라이언트 접속 처리
        ///// </summary>
        //public void AcceptClient()
        //{
        //    try
        //    {
        //        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, this.port);
        //        server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //        server.Bind(ipep);
        //        server.Listen(20);

        //        while (true)
        //        {
        //            Socket client = server.Accept();
        //            IPEndPoint ip = (IPEndPoint)client.RemoteEndPoint;
        //            this.wnd.Add_MSG(ip.Address + "접속...");

        //            if (client.Connected)
        //            {
        //                this.ClientConnect(client);  // 접속처리 (1, 로그인, 2. 회원가입)
        //            }

        //        }

        //    }
        //    catch (Exception ex)
        //    {
        //        this.wnd.Add_MSG(ex.Message);
        //    }
        //}


        ///// <summary>
        ///// 데이터 전송
        ///// </summary>
        ///// <param name="data">전송할 데이터</param>
        //private void SendData(byte[] data, Socket client)
        //{
        //    try
        //    {
        //        int total = 0;
        //        int size = data.Length;
        //        int left_data = size;
        //        int send_data = 0;

        //        // 전송할 실제 데이터의 크기 전달
        //        byte[] data_size = new byte[4];
        //        data_size = BitConverter.GetBytes(size);
        //        send_data = client.Send(data_size);

        //        // 실제 데이터 전송
        //        while (total < size)
        //        {
        //            send_data = client.Send(data, total, left_data, SocketFlags.None);
        //            total += send_data;
        //            left_data -= send_data;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        this.wnd.Add_MSG(ex.Message);
        //    }
        //}


        ///// <summary>
        ///// 데이터 수신
        ///// </summary>		
        ///// <returns>수신한 데이터 배열</returns>
        //private byte[] ReceiveData(Socket client)
        //{
        //    try
        //    {
        //        int total = 0;
        //        int size = 0;
        //        int left_data = 0;
        //        int recv_data = 0;

        //        // 수신할 데이터 크기 알아내기   
        //        byte[] data_size = new byte[4];
        //        recv_data = client.Receive(data_size, 0, 4, SocketFlags.None);
        //        size = BitConverter.ToInt32(data_size, 0);
        //        left_data = size;

        //        byte[] data = new byte[size];
        //        // 서버에서 전송한 실제 데이터 수신
        //        while (total < size)
        //        {
        //            recv_data = client.Receive(data, total, left_data, SocketFlags.None);
        //            if (recv_data == 0) break;
        //            total += recv_data;
        //            left_data -= recv_data;
        //        }
        //        return data;
        //    }
        //    catch (Exception ex)
        //    {
        //        this.wnd.Add_MSG(ex.Message);
        //        return null;
        //    }
        //}

    }
}
